import 'dart:math';

import 'package:flutter/material.dart';

extension FittedSize on Size {
  /// 如果 [Size] 的 [width] 和 [height] 都比 [outer] 的小，
  /// 则返回原值；否则返回按比例缩小后的 size。
  Size fitIn(Size outer) {
    if (width <= outer.width && height <= outer.height) {
      return this;
    }

    if (width == 0 || height == 0) {
      return this;
    }

    if (outer.width == 0 || outer.height == 0) {
      return this;
    }

    final wr = width / outer.width;
    final hr = height / outer.height;
    final r = max(wr, hr);

    return Size(
      (width / r).roundToDouble(),
      (height / r).roundToDouble(),
    );
  }
}
